package array;

/**
 * 这里有 n 个航班，它们分别从 1 到 n 进行编号。
 *
 * 有一份航班预订表 bookings ，表中第 i 条预订记录 bookings[i] = [firsti, lasti, seatsi] 
 * 意味着在从 firsti 到 lasti （包含 firsti 和 lasti ）的 每个航班 上预订了 seatsi 个座位。
 *
 * 请你返回一个长度为 n 的数组 answer，里面的元素是每个航班预定的座位总数。
 */
public class leetCode1109_corpFlightBookings {
    /**
     * 换一种思路理解题意，将问题转换为：某公交车共有 n 站，第 i 条记录 bookings[i] = [i, j, k] 表示在 i 站上车 k 人，
     * 乘坐到 j 站，在 j+1 站下车，需要按照车站顺序返回每一站车上的人数
     *
     * 根据 1 的思路，定义 counter[] 数组记录每站的人数变化，counter[i] 表示第 i+1 站。
     * 遍历 bookings[]：bookings[i] = [i, j, k] 表示：
     * 在 i 站增加 k 人即 counters[i-1] += k，
     * 在 j+1 站减少 k 人即 counters[j] -= k
     *
     * 遍历（整理）counter[] 数组，得到每站总人数：
     * 每站的人数为前一站人数加上当前人数变化 counters[i] += counters[i - 1]
     *
     */
    public int[] corpFlightBookings(int[][] bookings, int n) {

        int[] count = new int[n];

        for (int[] booking : bookings) {
            count[booking[0] - 1] += booking[2];
            if(booking[1] < n){
                count[booking[1]] -= booking[2];
            }
        }

        for (int i = 1; i < n; i++) {
            count[i] += count[i - 1];
        }
        return count;

    }

    public static void main(String[] args) {
        int[][] bookings = {{1,2,10},{2,3,20},{2,5,25}};
        int n = 5;
        leetCode1109_corpFlightBookings a = new leetCode1109_corpFlightBookings();
        int[] ints = a.corpFlightBookings(bookings, 5);
        System.out.println(1);
    }
}
